#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m,L,V,cnt;
int d[N],v[N],a[N],p[N];
int p2[N],m2;
bool check(int v0,int x,int aa){
	if(x>p[m] || V*V>=2*aa*(p[m]-x)+v0*v0) return 0;
	return 1;
}
bool Check(int v0,int x,int aa){
	if(x>p2[m2] || V*V>=2*aa*(p2[m2]-x)+v0*v0) return 0;
	return 1;
}
bool check2(int v0,int x,int aa){
	if(x>p[m] || v0<=V) return 0;
	int l=1,r=m;
	while(l<r){
		int mid=l+r>>1;
		if(p[mid]<x) l=mid+1;
		else r=mid;
	}
	if(V*V>=v0*v0+2*aa*(p[l]-x)) return 0;
	return 1;
}
bool Check2(int v0,int x,int aa){
	if(x>p2[m2] || v0<=V) return 0;
	int l=1,r=m2;
	while(l<r){
		int mid=l+r>>1;
		if(p2[mid]<x) l=mid+1;
		else r=mid;
	}
	if(V*V>=v0*v0+2*aa*(p2[l]-x)) return 0;
	return 1;
}
int main(){
	freopen("detect.in","r",stdin);
	freopen("detect.out","w",stdout);
	int T;
	cin>>T;
	while(T--){
		bool F1=1,F2=1; cnt=0;
		scanf("%d%d%d%d",&n,&m,&L,&V);
		for(int i=1;i<=n;i++){
			scanf("%d%d%d",&d[i],&v[i],&a[i]);
			if(a[i]!=0) F1=0;
			if(a[i]<=0) F2=0;
		}
		for(int i=1;i<=m;i++){
			scanf("%d",&p[i]);
		}
		if(F1){
			for(int i=1;i<=n;i++){
				if(d[i]<=p[m] && v[i]>V){
					cnt++;
				}
			}
			if(cnt==0) printf("%d %d\n",cnt,m);
			else printf("%d %d\n",cnt,m-1);
		}
		else if(F2){
			for(int i=1;i<=n;i++){
				if(check(v[i],d[i],a[i])) cnt++;
			}
			if(cnt==0) printf("%d %d\n",cnt,m);
			else printf("%d %d\n",cnt,m-1);
		}
		else{
			for(int i=1;i<=n;i++){
				if(a[i]>0){
					if(check(v[i],d[i],a[i])) cnt++;
				}
				if(a[i]==0){
					if(d[i]<=p[m] && v[i]>V) cnt++;
				}
				if(a[i]<0){
					if(check2(v[i],d[i],a[i])) cnt++;
				}
			}
			printf("%d ",cnt);
			if(cnt==0){
				printf("%d\n",m);
				continue;
			}
			int ans=0;
			for(int i=1;i<(1<<m);i++){
				memset(p2,0,sizeof(p2)); m2=0;
				int cnt2=0;
				for(int j=1;j<=m;j++){
					if(!((1<<j-1)&i)) continue;
					p2[++m2]=p[j];
				}
				for(int j=1;j<=n;j++){
					if(a[j]>0){
						if(Check(v[j],d[j],a[j])) cnt2++;
					}
					if(a[j]==0){
						if(d[j]<=p2[m2] && v[j]>V) cnt2++;
					}
					if(a[j]<0){
						if(Check2(v[j],d[j],a[j])) cnt2++;
					}
				}
				if(cnt2==cnt){
					ans=max(ans,m-m2);
				}
			}
			printf("%d\n",ans);
		}
	}

	return 0;
}